package com.syedu.day10;

/**
 * description：抽象类 abstract
 *
 * calcLength()和calcArea()根据面向父类编程的概念,必须在父类中定义,但是,这两个方法
 * 的实现是没有意义的(因为一个抽象的形状无法计算周长和面积),所以这两个方法可以设置成抽象方法,
 * 然后把Shape类也设置成抽象类
 *
 * abstract修饰类,表示该类为抽象类
 * 特点:
 * 1.抽象类不能被实例化,即不能通过new来创建对象
 * 2.抽象类可以有属性,构造,方法
 * 3.抽象类可以有抽象方法,也可以没有
 *   但是,一个类中如果有抽象方法,则这个类一定是抽象类
 * 4.抽象类天生就是用来被继承的
 *   一个类如果继承了抽象父类,则必须重写抽象父类中所有的抽象方法(强制),除非子类也是抽象类
 *
 * 抽象类和普通类的区别:
 * 1.抽象类不能被实例化,而普通类可以
 * 2.抽象类可以有抽象方法,而普通类不可以有
 * 3.普通子类继承普通父类,对父类的方法的重写不是强制要求的
 *   普通子类继承抽象父类,则父类中的抽象方法是强制必须重写的
 *   抽象子类继承抽象父类,则子类可以选择重写或者不重写父类方法
 *
 * abstract修饰方法,表示该方法为抽象方法,抽象方法是没有任何实现的方法(没有方法体,直接以;结尾),
 * 抽象方法不能调用,它天生是用来被覆盖的!
 *
 * 注意:
 * 1.abstract和final不同同时修饰类和方法
 * 2.static和abstract不能同时修饰方法
 * 3.private和abstract不能同时存在
 *
 * 补充:
 * main方法为什么是静态的?
 * 如果main方法不声明为静态的，JVM就必须创建main类的实例，因为构造器可以被重载，JVM就没法确定调用哪个main方法。
 *
 * @author Administrator
 * @date 2022/3/21 9:39
 */
public abstract class Shape {

    /*private int id;

    public Shape(){}

    public void method(){

    }*/

    /**抽象方法*/
    public abstract void calcLength();
    public abstract void calcArea();
}